package twelfth.对象序列化;

import java.io.*;

public class 序列化与反序列化对象 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        ser();
        dser();
    }

    public static void ser() throws IOException {
        File file = new File("D:\\WorkSpaces\\JavaDevelopBase_start_329\\src\\twelfth\\ObjectOutputStream.txt");
        FileOutputStream fos = new FileOutputStream(file);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(new Person("to be a better man", 88));
        oos.close();
    }

    public static void dser() throws IOException, ClassNotFoundException {
        File file = new File("D:\\WorkSpaces\\JavaDevelopBase_start_329\\src\\twelfth\\ObjectOutputStream.txt");
        FileInputStream fis = new FileInputStream(file);
        ObjectInputStream ois = new ObjectInputStream(fis);
        Object obj = ois.readObject();
        ois.close();
        System.out.println(obj);
    }
}
/**
 * 从上面代码可以看出 使用Externaliable接口序列化明显比用Serializable接口实现序列化麻烦
 * 除此之外，两者的实现还有不同：
 *              Serializable                Externalizable
 * 实现复杂度： 实现简单，Java对其有内建支持      实现复杂，由开发人员自己完成
 * 执行效率 ：  所有对象由Java统一保存，性能低    开发人员决定哪个对象保存，可能的速度提升
 * 保存信息 ： 保存时占用的空间大                部分存储，可能的空间减少
 *
 * 在一般的开发中，因为Serializable接口的使用更方便。
 *
 */